package com.test.example.controller;


import com.xingluo.generator.GeneratorUtils;
import com.xingluo.generator.config.CodeStrategy;
import com.xingluo.generator.config.GeneratorConfig;

import java.util.Arrays;

public class CodeAutoGenerator {

    public static void main(String[] args) {
        // 配置数据库连接信息

        GeneratorConfig config = new GeneratorConfig(
                "jdbc:mysql://47.122.63.233:3306/xingluo-admin?serverTimezone=GMT%2B8",
                "root",
                "??__??"
        );

        // 基础配置
        config.author("XingLuo")                    // 设置作者
                .packageName("com.test.generator")    // 设置包名
                .fileOverride(true)                   // 覆盖已有文件
                .springdoc(false)                      // 启用Swagger3文档
                .controller(true)                     // 生成Controller
                .service(true)                        // 生成Service
                .entity(true)                         // 生成Entity
                .mapper(true)                         // 生成Mapper
                .xml(true)                           // 生成XML
                .parma(true)                         // 生成Param
                .vo(true)                            // 生成VO
                .api(true)                           // 生成API
                .vue(true);                           // 生成Vue

        // 代码策略配置
        CodeStrategy codeStrategy = new CodeStrategy()
                .saToken(true)                      // 启用Sa-Token权限
                .sortName("sort")                   // 排序字段名
                .resourceNames(Arrays.asList("face", "avatar", "face_url")) // 资源字段名列表
                .statusName("status")
                .enumDict(true)                  // 生成Enum
                .enumDicts(i -> i
                        .addEnumDict("product_status", "商品状态", map -> map
                                .dictData("已上架", "0")
                                .dictData("已下架", "1")
                        )
                )
                .vueStatusEnums(i -> i
                        .addPageStatusEnum("product", "status", "product_status")
                )
                .vueForeignKeys(i -> i
                        .addPageForeignKeys("product", builder -> builder
                                .foreignKey("factory_id", "factory", "id", "name", "工厂列表")
                                .foreignKey("category_id", "product_category", "id", "name")
                                .foreignKey("brand_id", "brand", "id", "brand_name")
                        )
                );

        config.codeStrategy(codeStrategy);

        // 创建代码生成器工具类
        GeneratorUtils generator = new GeneratorUtils(config);

        // 生成指定表的代码
        generator.generateCode("product", "product_category", "brand", "factory");
        // 生成所有表的代码
        // generator.generateCode();

        // generator.generateEnum();
    }
} 






